﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ModeloMagiPack.Entidades;
using BLLMagiPack.Managers;

namespace MaGiPack.Movimientos
{
    public partial class FrmCuentaBancaria : Form
    {
        Acciones _accionActual;
        int _idCuentaBancaria;

        public CuentaBancaria CuentaBancariaSeleccionada { get; set; }


        public FrmCuentaBancaria(bool modoSeleccion)
        {
            InitializeComponent();
            _accionActual = Acciones.alta;

            if (modoSeleccion)
            {
                btnSeleccionarCheque.Visible = true;
                this.Size = new Size(393, 487);
            }
            else
            {
                btnSeleccionarCheque.Visible = false;
                this.Size = new Size(393, 451);
            }
        }

        public FrmCuentaBancaria() : this(false) { }

        private bool ValidarDatos()
        {
            bool estaOK = true;
            Utilidades.LimpiarErrores(this, errorCuenta);
            estaOK = Utilidades.ValidarDatos(this, errorCuenta);

            return estaOK;
        }

        private void CargarBancos()
        {
            cboBancos.DataSource = new BLLBanco().TraerBancos();
        }

        private void CargarCuentasBancarias()
        {
            dgvCuentas.DataSource = (from c in new BLLCuentaBancaria().TraerCuentas()
                                     select new
                                     {
                                         IdCuentaBancaria = c.IdCuentaBancaria,
                                         Descripcion = c.Nombre,
                                         Banco = new BLLBanco().TraerBanco(c.IdBanco).NombreBanco
                                     }).ToList();
        }

        private void CargarDatos()
        {
            CuentaBancaria cuenta = new BLLCuentaBancaria().Traer(_idCuentaBancaria);
            txtDescirpcion.Text = cuenta.Nombre;
            cboBancos.SelectedText = new BLLBanco().TraerBanco(cuenta.IdBanco).NombreBanco;
        }


        private void FrmCuentaBancaria_Load(object sender, EventArgs e)
        {
            CargarBancos();
            CargarCuentasBancarias();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidarDatos())
                {
                    CuentaBancaria cuenta = new CuentaBancaria();
                    cuenta.IdBanco = (cboBancos.SelectedItem as Banco).IdBanco;
                    cuenta.Nombre = txtDescirpcion.Text;

                    BLLCuentaBancaria bll = new BLLCuentaBancaria();

                    if (_accionActual == Acciones.alta)
                    {
                        bll.CargarNueva(cuenta);
                        cboBancos.SelectedIndex = 0;
                        txtDescirpcion.Text = string.Empty;
                    }
                    else if (_accionActual == Acciones.modificacion)
                    {
                        cuenta.IdCuentaBancaria = _idCuentaBancaria;
                        bll.ModificarCuenta(cuenta);
                    }

                    MessageBox.Show("¡Su operación se completó con éxito!", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    CargarCuentasBancarias();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dgvCuentas_SelectionChanged(object sender, EventArgs e)
        {
            btnRemover.Enabled = btnEditar.Enabled = dgvCuentas.SelectedRows.Count > 0;
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show(string.Format("¿Eliminar?"), "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                return;

            int idCuentaBancaria = (int)dgvCuentas.SelectedRows[0].Cells[0].Value;
            BLLCuentaBancaria bll = new BLLCuentaBancaria();
            bll.Eliminar(idCuentaBancaria);
            CargarCuentasBancarias();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            _idCuentaBancaria = (int)dgvCuentas.SelectedRows[0].Cells[0].Value;
            _accionActual = Acciones.modificacion;
            CargarDatos();
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.alta;
            txtDescirpcion.Text = string.Empty;
            cboBancos.SelectedIndex = 0;
            txtDescirpcion.Focus();
        }

        private void btnSeleccionarCheque_Click(object sender, EventArgs e)
        {
            if (dgvCuentas.SelectedRows.Count == 0)
            {
                MessageBox.Show("Seleccione una cuenta", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            int idCuentaBancaria = (int)dgvCuentas.SelectedRows[0].Cells[0].Value;
            CuentaBancariaSeleccionada = new BLLCuentaBancaria().Traer(idCuentaBancaria);
            DialogResult = DialogResult.OK;
            Close();
        }
    }
}
